package com.sftz.modules.minapp.coursestudy.service;

import java.util.List;

import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.SqlManager;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;

import com.sftz.assets.entities.CourseEntity;
import com.sftz.assets.entities.inform.NoticeContentEntity;
import com.sftz.assets.enums.CourseStateEnum;
import com.sftz.assets.enums.NoticeTypeEnum;
import com.sftz.modules.minapp.coursestudy.dto.NoticInfoDto;
import com.sftz.modules.minapp.coursestudy.form.GradeCourseForm;
import com.sftz.modules.minapp.resourceRecord.dto.PersonCourseScoreDto;
import com.sftz.modules.minapp.resourceRecord.service.StudentOtherCourseScoreViewService;
import com.uxuexi.core.db.dao.IDbDao;
import com.uxuexi.core.db.util.DbSqlUtil;

/**
 * 课程公告相关
 * @author   gyp
 * @Date	 2018年12月17日
 */
@IocBean
public class NoticeContentService {
	@Inject
	protected IDbDao dbDao;
	@Inject
	protected Dao nutDao;
	@Inject
	protected SqlManager sqlManager;
	@Inject
	private StudentOtherCourseScoreViewService studentOtherCourseScoreViewService;

	@Inject
	private CourseInfoService courseInfoService;

	/**
	 * 获取课程得分标准
	 * @Date 2018年12月24日
	 * @author gyp
	 * @param courseId
	 * @param userId
	 */
	public PersonCourseScoreDto findStudentScore(Integer courseId, Integer userId) {
		PersonCourseScoreDto dto = studentOtherCourseScoreViewService.findStudentScore(courseId, userId);
		return dto;
	}

	/**
	 * 获取课程的详细信息
	 * @Date 2018年12月24日
	 * @author gyp
	 * @param courseid
	 * @return(这里描述每个参数,如果有返回值描述返回值,如果有异常描述异常)
	 */
	public CourseEntity getCourseInfo(int courseid) {
		CourseEntity course = courseInfoService.getCourseInfo(courseid);
		return course;
	}

	/**
	 * 获取当前课程下的公告信息
	 * @Date 2018年12月17日
	 * @author gyp
	 * @param courseId
	 */
	public List<NoticeContentEntity> getNoticeContentByCourseId(int courseId) {

		List<NoticeContentEntity> noticeContents = dbDao
				.query(NoticeContentEntity.class,
						Cnd.where("courseId", "=", courseId).and("noticeType", "=", NoticeTypeEnum.COURSE.intKey())
								.and("publishStatus", "=", CourseStateEnum.PUBLISHED.intKey())
								.and("isDelete", "=", null), null);
		return noticeContents;
	}

	/**
	 * 获取课程评分所占的百分比的内容
	 * @Date 2018年12月17日
	 * @author gyp
	 * @param courseId
	 */
	public List<GradeCourseForm> getGradeCourseListByCourseId(Integer courseId) {
		Sql sql = Sqls.create(sqlManager.get("minapp_courseStudy_relation_byCourseId"));
		sql.params().set("courseId", courseId);
		List<GradeCourseForm> list = DbSqlUtil.query(dbDao, GradeCourseForm.class, sql);
		return list;
	}

	/**
	 * 获取公告的详细信息。
	 * @Date 2018年12月18日
	 * @author gyp
	 * @param id
	 */
	public NoticInfoDto getNoticeContent(Integer id) {

		Sql sql = Sqls.create(sqlManager.get("minapp_course_notic_getNoticInfo"));
		sql.params().set("noticeId", id);
		NoticInfoDto info = DbSqlUtil.fetchEntity(dbDao, NoticInfoDto.class, sql);
		return info;
	}
}
